
//////////////////////////////////////////////////////////////////////////////////	 
//
//  文 件 名   : mator.h
//  版 本 号   : 1.0
//  作    者   : Wsy
//  生成日期   : 2024/3/13
//  邮箱       : 18269214440@163.com
//  功能描述   : 各种继电器开关函数和相关引脚初始化函数以及各种洗衣模式的配套功能函数的声明
//               和所需的各种外部全局变量和任务优先级宏定义等
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////

#ifndef __MOTOR_H
#define __MOTOR_H

#include "stm32f4xx.h"
#include "delay.h"
#include "stm32f4xx.h"  //必须添加
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include "delay.h"		  //用户自行封装的延时函数，用于实现精确的非阻塞延时
#include "mator.h"
#include "sys.h"
#include "oled.h"


//定义宏来方便控制任务优先级
#define TimeShow_PRIORITY 5            //显示时间任务

//定义宏来方便控制抽水时间
#define Water_UP_Time  27             //显示时间任务

//定义宏来方便控制排水时间
#define Water_DW_Time  33              //显示时间任务

//定义一个全局变量来确认是否已经上锁
/******* 0 空闲  |  1 上锁  *************/
extern volatile int  En_Block ;

//定义一个全局变量来确定是否正在运行
/******* 0 空闲  |  1 工作  *************/
extern volatile int En_Run ;

//定义两个全局变量来确定当前运行模式
/******* 1 - 8 常规模式  *************/
extern volatile int RunMode1 ;

/******* 9 - 16 定制模式  *************/
extern volatile int RunMode2 ;

//定义一个全局变量来确定当前可燃气
extern volatile int NatGas_value ;    //


// 定义一个全局变量来表示剩余时间
extern volatile char time_arr[20];

//定义全局数组变量来决定各模式的运行时间

/*******************左边1-8模式*************/
extern volatile int mode_1[4];
extern volatile int mode_2[4];
extern volatile int mode_3[4];
extern volatile int mode_4[4];
extern volatile int mode_5[4];
extern volatile int mode_6[4];
extern volatile int mode_7[4];
extern volatile int mode_8[4];

/*******************左边9-16模式*************/
extern volatile int mode_9[4];
extern volatile int mode_10[4];
extern volatile int mode_11[4];
extern volatile int mode_12[4];
extern volatile int mode_13[4];
extern volatile int mode_14[4];
extern volatile int mode_15[4];
extern volatile int mode_16[4];


//定义14个宏来方便使用继电器和天问的引脚
#define T_LEFT_B1 GPIO_Pin_7     //左边第一个，端口是D端口
#define T_LEFT_A2 GPIO_Pin_4      //依次类推
#define T_LEFT_G3 GPIO_Pin_15
#define T_LEFT_A4 GPIO_Pin_10
#define T_LEFT_C5 GPIO_Pin_9
#define T_LEFT_B6 GPIO_Pin_6
#define T_LEFT_B7 GPIO_Pin_9
#define T_LEFT_A8 GPIO_Pin_8     //*********************


#define J_RIGHT_C1 GPIO_Pin_6     //右边边第一个，端口是D端口
#define J_RIGHT_C2 GPIO_Pin_8    //依次类推
#define J_RIGHT_C3 GPIO_Pin_11
#define J_RIGHT_E4 GPIO_Pin_5
#define J_RIGHT_A5 GPIO_Pin_6
#define J_RIGHT_G6 GPIO_Pin_9

//定义宏来方便控制蜂鸣器
#define BEEP_F8 GPIO_Pin_8

//控制右1继电器
#define J_RIGHT_C1_CMD(n) (n) ? GPIO_SetBits(GPIOC,J_RIGHT_C1) : GPIO_ResetBits(GPIOC,J_RIGHT_C1)

//控制右2继电器
#define J_RIGHT_C2_CMD(n) (n) ? GPIO_SetBits(GPIOC,J_RIGHT_C2) : GPIO_ResetBits(GPIOC,J_RIGHT_C2)

//控制右3继电器
#define J_RIGHT_C3_CMD(n) (n) ? GPIO_SetBits(GPIOC,J_RIGHT_C3) : GPIO_ResetBits(GPIOC,J_RIGHT_C3)

//控制右4继电器
#define J_RIGHT_E4_CMD(n) (n) ? GPIO_SetBits(GPIOE,J_RIGHT_E4) : GPIO_ResetBits(GPIOE,J_RIGHT_E4)

//控制右5继电器
#define J_RIGHT_A5_CMD(n) (n) ? GPIO_SetBits(GPIOA,J_RIGHT_A5) : GPIO_ResetBits(GPIOA,J_RIGHT_A5)

//控制右6继电器
#define J_RIGHT_G6_CMD(n) (n) ? GPIO_SetBits(GPIOG,J_RIGHT_G6) : GPIO_ResetBits(GPIOG,J_RIGHT_G6)

//控制蜂鸣器
#define BEEP_F8_CMD(n) (n) ? GPIO_SetBits(GPIOF,BEEP_F8) : GPIO_ResetBits(GPIOF,BEEP_F8)

//控制开锁
#define BLOCK_CMD(n) (n) ? GPIO_SetBits(GPIOG,T_LEFT_G3) : GPIO_ResetBits(GPIOG,T_LEFT_G3)

//控制运行状态
#define RUN_CMD(n) (n) ? GPIO_SetBits(GPIOF,GPIO_Pin_9) : GPIO_ResetBits(GPIOF,GPIO_Pin_9)


//时间显示任务
void Time_Show(void *arg);

/// @brief 将选择好的模式传入，即可控制马达洗衣等来洗衣
/// @param mode 选择的洗衣模式
void StartRun(int mode);


///测量水位的代码函数
void WaterLevel_Config(void);

//继电器的io口初始化
void Relay_Config(void);

//天问的io口初始化
void Tianwen_Low(void);

//将继电器io口全部低电平
void Relay_Low(void);

//将继电器io口全部高电平
void Relay_Height(void);

//控制打开继电器
void Select_Relay(int cnt);

//排水的函数
void Water_Down(void);

//抽水的函数
void Water_Put(void);

//显示剩余时间的函数
void Time_Show(void *arg);

//计算各模式所需抽水、排水所需时间
void WaterTimeVa(void);

//蜂鸣器的初始化
void Beep_Config(void);

/// @brief 标准洗模式，包含洗涤、漂洗、甩干
void Standard(void);

/// @brief 快速洗模式，包含洗涤、漂洗、甩干
void Speed(void);

/// @brief 洗+烘模式，包含洗涤、漂洗、甩干、烘干
void WashingDrying(void);

/// @brief 漂+洗模式，包含洗涤、漂洗、甩干
void Rinse(void);

/// @brief 单烘模式，包含甩干、烘干
void Drying(void);

/// @brief 单脱水模式，包含甩干
void Dehydration(void);

/// @brief 筒自洁模式，包含洗涤、漂洗、甩干
void SelfCleaning(void);

/// @brief蜂鸣器响的函数
void BeepExalrm(void);

#endif

